import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from datetime import datetime, timedelta
import sys
import os
import numpy as np

# 添加src到路径
sys.path.append(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'src'))

# 页面配置已在主应用中设置

# 样式配置
st.markdown("""
<style>
    .metric-card {
        background-color: #f0f2f6;
        padding: 1.5rem;
        border-radius: 10px;
        box-shadow: 0 2px 4px rgba(0,0,0,0.1);
    }
    .alert-high { background-color: #ffebee; border-left: 5px solid #f44336; }
    .alert-medium { background-color: #fff3e0; border-left: 5px solid #ff9800; }
    .alert-low { background-color: #e8f5e8; border-left: 5px solid #4caf50; }
    .inventory-card {
        border: 1px solid #ddd;
        border-radius: 8px;
        padding: 1rem;
        margin: 0.5rem 0;
        background-color: #fafafa;
    }
</style>
""", unsafe_allow_html=True)

# 页面标题
st.markdown('<div style="font-size: 2.5rem; font-weight: bold; color: #1f77b4; text-align: center; margin-bottom: 2rem;">📦 高级库存管理系统</div>', unsafe_allow_html=True)

# 侧边栏功能选择
st.sidebar.title("功能菜单")
function = st.sidebar.selectbox(
    "选择功能",
    ["📊 智能库存分析", "🔄 动态补货策略", "📈 库存优化建议", "⚠️ 异常库存监控", "🎯 ABC-XYZ分析", "📋 库存绩效评估", "🔮 智能预测分析"]
)

# 智能库存分析
if function == "📊 智能库存分析":
    st.header("智能库存分析")
    
    # 关键指标
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.markdown('<div class="metric-card">', unsafe_allow_html=True)
        st.metric("库存周转率", "8.5次/年", "0.8")
        st.markdown('</div>', unsafe_allow_html=True)
    
    with col2:
        st.markdown('<div class="metric-card">', unsafe_allow_html=True)
        st.metric("库存准确率", "98.7%", "1.2%")
        st.markdown('</div>', unsafe_allow_html=True)
    
    with col3:
        st.markdown('<div class="metric-card">', unsafe_allow_html=True)
        st.metric("缺货率", "2.1%", "-0.5%")
        st.markdown('</div>', unsafe_allow_html=True)
    
    with col4:
        st.markdown('<div class="metric-card">', unsafe_allow_html=True)
        st.metric("库存成本率", "15.2%", "-1.1%")
        st.markdown('</div>', unsafe_allow_html=True)
    
    st.markdown("---")
    
    # 库存健康度分析
    col1, col2 = st.columns(2)
    
    with col1:
        st.subheader("库存健康度评估")
        
        health_data = pd.DataFrame({
            '评估维度': ['周转效率', '库存准确性', '服务水平', '成本控制', '预测精度'],
            '当前得分': [85, 92, 78, 88, 82],
            '目标得分': [90, 95, 85, 90, 88],
            '权重': [25, 20, 20, 20, 15]
        })
        
        # 雷达图
        fig_radar = go.Figure()
        
        fig_radar.add_trace(go.Scatterpolar(
            r=health_data['当前得分'],
            theta=health_data['评估维度'],
            fill='toself',
            name='当前表现',
            line_color='blue'
        ))
        
        fig_radar.add_trace(go.Scatterpolar(
            r=health_data['目标得分'],
            theta=health_data['评估维度'],
            fill='toself',
            name='目标水平',
            line_color='red',
            line_dash='dash'
        ))
        
        fig_radar.update_layout(
            polar=dict(
                radialaxis=dict(
                    visible=True,
                    range=[0, 100]
                )
            ),
            showlegend=True,
            title="库存管理健康度雷达图"
        )
        
        st.plotly_chart(fig_radar, use_container_width=True)
    
    with col2:
        st.subheader("库存结构分析")
        
        structure_data = pd.DataFrame({
            '库存类型': ['原材料', '在制品', '成品', '备品备件', '包装材料'],
            '库存金额': [2800000, 1200000, 4500000, 680000, 320000],
            '占比': [29.5, 12.6, 47.4, 7.2, 3.4],
            '周转天数': [45, 15, 25, 120, 60]
        })
        
        fig_structure = px.treemap(structure_data, 
                                 path=['库存类型'], 
                                 values='库存金额',
                                 title="库存结构树状图")
        st.plotly_chart(fig_structure, use_container_width=True)
        
        # 库存结构表格
        display_structure = structure_data.copy()
        display_structure['库存金额'] = display_structure['库存金额'].apply(lambda x: f'¥{x:,.0f}')
        display_structure['占比'] = display_structure['占比'].apply(lambda x: f'{x:.1f}%')
        
        st.dataframe(display_structure, use_container_width=True, height=300)
    
    # 库存趋势分析
    st.subheader("库存趋势分析")
    
    # 生成趋势数据
    dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
    trend_data = pd.DataFrame({
        '日期': dates,
        '库存总额': [9500000 + i*1000 + np.random.randint(-50000, 50000) for i in range(len(dates))],
        '周转率': [8.5 + np.random.normal(0, 0.5) for _ in range(len(dates))],
        '缺货次数': [np.random.poisson(2) for _ in range(len(dates))]
    })
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 库存金额趋势
        fig_amount = px.line(trend_data, x='日期', y='库存总额',
                           title="库存金额趋势")
        st.plotly_chart(fig_amount, use_container_width=True)
    
    with col2:
        # 周转率趋势
        fig_turnover = px.line(trend_data, x='日期', y='周转率',
                             title="库存周转率趋势")
        st.plotly_chart(fig_turnover, use_container_width=True)
    
    # 库存异常检测
    st.subheader("库存异常检测")
    
    anomaly_data = pd.DataFrame({
        '产品编码': [f'P{i:04d}' for i in range(1, 11)],
        '产品名称': [f'产品{chr(65+i)}' for i in range(10)],
        '当前库存': [150, 0, 2500, 80, 1200, 45, 0, 890, 3200, 25],
        '安全库存': [200, 100, 1000, 150, 800, 80, 50, 600, 1500, 60],
        '最大库存': [500, 300, 2000, 400, 1600, 200, 150, 1200, 3000, 150],
        '异常类型': ['库存不足', '缺货', '库存过量', '库存不足', '库存过量', 
                  '库存不足', '缺货', '库存过量', '库存过量', '库存不足'],
        '风险等级': ['中', '高', '中', '中', '低', '中', '高', '低', '中', '高']
    })
    
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_anomaly_risk(row):
        if row['风险等级'] == '高':
            return ['background-color: #ffebee'] * len(row)
        elif row['风险等级'] == '中':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = anomaly_data.style.apply(highlight_anomaly_risk, axis=1)
    st.dataframe(styled_df, use_container_width=True, height=350)

# 动态补货策略
elif function == "🔄 动态补货策略":
    st.header("动态补货策略")
    
    # 补货策略概览
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("待补货产品", "23", "5")
    with col2:
        st.metric("紧急补货", "8", "2")
    with col3:
        st.metric("预计补货金额", "¥2.8M", "¥0.5M")
    with col4:
        st.metric("平均补货周期", "12天", "-2天")
    
    # 补货策略选择
    st.subheader("补货策略配置")
    
    col1, col2 = st.columns(2)
    
    with col1:
        strategy_type = st.selectbox("补货策略类型", 
                                   ["定期订货策略", "定量订货策略", "混合策略", "JIT策略"])
        
        if strategy_type == "定期订货策略":
            review_period = st.slider("检查周期(天)", 1, 30, 7)
            service_level = st.slider("服务水平(%)", 90, 99, 95)
            
        elif strategy_type == "定量订货策略":
            reorder_point = st.number_input("再订货点", min_value=0, value=100)
            order_quantity = st.number_input("订货批量", min_value=1, value=500)
            
        elif strategy_type == "混合策略":
            abc_strategy = st.selectbox("ABC分类策略", ["A类-定量", "B类-定期", "C类-批量"])
            
        else:  # JIT策略
            lead_time = st.slider("提前期(天)", 1, 15, 3)
            buffer_stock = st.slider("缓冲库存(%)", 0, 20, 5)
    
    with col2:
        st.subheader("策略效果预测")
        
        # 策略效果对比
        strategy_comparison = pd.DataFrame({
            '策略类型': ['定期订货', '定量订货', '混合策略', 'JIT策略'],
            '库存成本': [850000, 920000, 780000, 650000],
            '缺货风险': [2.1, 1.8, 1.5, 3.2],
            '管理复杂度': [3, 2, 4, 5],
            '适用场景': ['需求稳定', '需求波动', '多品种', '精益生产']
        })
        
        fig_strategy = px.scatter(strategy_comparison, 
                                x='库存成本', y='缺货风险',
                                size='管理复杂度', 
                                color='策略类型',
                                title="补货策略效果对比")
        st.plotly_chart(fig_strategy, use_container_width=True)
    
    # 补货建议列表
    st.subheader("补货建议列表")
    
    replenishment_data = pd.DataFrame({
        '产品编码': [f'P{i:04d}' for i in range(1, 16)],
        '产品名称': [f'产品{chr(65+i%10)}' for i in range(15)],
        '当前库存': [50, 0, 180, 25, 300, 80, 0, 120, 45, 200, 15, 90, 0, 160, 35],
        '安全库存': [100, 80, 200, 60, 250, 120, 40, 150, 80, 180, 50, 100, 30, 140, 70],
        '建议订货量': [500, 400, 300, 250, 200, 350, 200, 280, 300, 220, 180, 320, 150, 260, 280],
        '预计到货': [datetime.now() + timedelta(days=i+3) for i in range(15)],
        '供应商': ['供应商A', '供应商B', '供应商C'] * 5,
        '紧急程度': ['高', '紧急', '中', '高', '低', '中', '紧急', '中', '高', '低', 
                  '紧急', '中', '紧急', '低', '高'],
        '预计成本': [np.random.randint(50000, 300000) for _ in range(15)]
    })
    
    # 格式化显示
    display_replenishment = replenishment_data.copy()
    display_replenishment['预计到货'] = display_replenishment['预计到货'].dt.strftime('%Y-%m-%d')
    display_replenishment['预计成本'] = display_replenishment['预计成本'].apply(lambda x: f'¥{x:,.0f}')
    
    # 使用缓存来避免重复计算样式，减少表格抖动
    def highlight_replenishment_urgency(row):
        if row['紧急程度'] == '紧急':
            return ['background-color: #ffebee'] * len(row)
        elif row['紧急程度'] == '一般':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return [''] * len(row)
    
    styled_df = display_replenishment.style.apply(highlight_replenishment_urgency, axis=1)
    st.dataframe(styled_df, use_container_width=True, height=400)
    
    # 补货计划优化
    st.subheader("补货计划优化")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 按供应商分组的补货计划
        supplier_summary = replenishment_data.groupby('供应商').agg({
            '建议订货量': 'sum',
            '预计成本': 'sum',
            '产品编码': 'count'
        }).reset_index()
        supplier_summary.columns = ['供应商', '总订货量', '总成本', '产品数量']
        
        fig_supplier = px.bar(supplier_summary, x='供应商', y='总成本',
                            title="各供应商补货成本分布")
        st.plotly_chart(fig_supplier, use_container_width=True)
    
    with col2:
        # 紧急程度分布
        urgency_stats = replenishment_data['紧急程度'].value_counts().reset_index()
        urgency_stats.columns = ['紧急程度', '数量']
        
        fig_urgency = px.pie(urgency_stats, values='数量', names='紧急程度',
                           title="补货紧急程度分布")
        st.plotly_chart(fig_urgency, use_container_width=True)
    
    # 自动补货设置
    st.subheader("自动补货设置")
    
    with st.expander("配置自动补货规则"):
        col1, col2 = st.columns(2)
        
        with col1:
            auto_replenish = st.checkbox("启用自动补货")
            min_stock_ratio = st.slider("最低库存比例(%)", 10, 50, 20)
            max_order_amount = st.number_input("单次最大订货金额", min_value=10000, value=500000)
        
        with col2:
            notification_email = st.text_input("通知邮箱", "admin@company.com")
            approval_required = st.checkbox("需要审批")
            emergency_threshold = st.slider("紧急补货阈值(%)", 5, 20, 10)
        
        if st.button("保存设置"):
            st.success("自动补货设置已保存！")

# 库存优化建议
elif function == "📈 库存优化建议":
    st.header("库存优化建议")
    
    # 优化目标设置
    st.subheader("优化目标设置")
    
    col1, col2, col3 = st.columns(3)
    
    with col1:
        target_turnover = st.slider("目标周转率(次/年)", 6.0, 15.0, 10.0, 0.5)
    with col2:
        target_service_level = st.slider("目标服务水平(%)", 90, 99, 95)
    with col3:
        cost_reduction_target = st.slider("成本降低目标(%)", 5, 30, 15)
    
    # 优化分析结果
    st.subheader("优化分析结果")
    
    optimization_results = pd.DataFrame({
        '产品类别': ['A类产品', 'B类产品', 'C类产品'],
        '当前库存': [4500000, 2800000, 1200000],
        '优化后库存': [3600000, 2400000, 1000000],
        '库存减少': [900000, 400000, 200000],
        '减少比例': [20.0, 14.3, 16.7],
        '当前周转率': [6.5, 8.2, 4.8],
        '优化后周转率': [8.1, 9.7, 5.8],
        '服务水平': [94.2, 96.1, 91.8]
    })
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 库存优化对比
        fig_optimization = go.Figure()
        
        fig_optimization.add_trace(go.Bar(
            name='当前库存',
            x=optimization_results['产品类别'],
            y=optimization_results['当前库存'],
            marker_color='lightblue'
        ))
        
        fig_optimization.add_trace(go.Bar(
            name='优化后库存',
            x=optimization_results['产品类别'],
            y=optimization_results['优化后库存'],
            marker_color='darkblue'
        ))
        
        fig_optimization.update_layout(
            title='库存优化前后对比',
            xaxis_title='产品类别',
            yaxis_title='库存金额',
            barmode='group'
        )
        
        st.plotly_chart(fig_optimization, use_container_width=True)
    
    with col2:
        # 周转率改善
        fig_turnover = px.scatter(optimization_results, 
                                x='当前周转率', y='优化后周转率',
                                size='库存减少', color='产品类别',
                                title="周转率改善分析")
        
        # 添加对角线
        fig_turnover.add_shape(
            type="line",
            x0=4, y0=4, x1=10, y1=10,
            line=dict(dash="dash", color="red")
        )
        
        st.plotly_chart(fig_turnover, use_container_width=True)
    
    # 优化建议详情
    st.subheader("详细优化建议")
    
    detailed_suggestions = pd.DataFrame({
        '产品编码': [f'P{i:04d}' for i in range(1, 11)],
        '产品名称': [f'产品{chr(65+i)}' for i in range(10)],
        '当前库存': [1500, 800, 2200, 450, 1800, 650, 300, 1200, 2800, 520],
        '建议库存': [1200, 600, 1800, 350, 1400, 500, 250, 950, 2200, 400],
        '调整量': [-300, -200, -400, -100, -400, -150, -50, -250, -600, -120],
        '调整比例': [-20.0, -25.0, -18.2, -22.2, -22.2, -23.1, -16.7, -20.8, -21.4, -23.1],
        '优化措施': ['减少安全库存', '提高周转频率', '优化批量', '改善预测', 
                  '减少安全库存', '提高周转频率', '优化批量', '改善预测',
                  '减少安全库存', '提高周转频率'],
        '预期效果': ['降低成本20%', '提升周转25%', '减少积压18%', '提高精度22%',
                  '降低成本22%', '提升周转23%', '减少积压17%', '提高精度21%',
                  '降低成本21%', '提升周转23%'],
        '实施难度': ['低', '中', '低', '高', '低', '中', '低', '高', '中', '中']
    })
    
    def highlight_adjustment(row):
        if row['调整比例'] < -20:
            return ['background-color: #ffebee'] * len(row)
        elif row['调整比例'] < -15:
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = detailed_suggestions.style.apply(highlight_adjustment, axis=1)
    st.dataframe(styled_df, use_container_width=True, height=350)
    
    # 实施计划
    st.subheader("优化实施计划")
    
    implementation_plan = pd.DataFrame({
        '阶段': ['第一阶段', '第二阶段', '第三阶段'],
        '时间周期': ['1-2个月', '3-4个月', '5-6个月'],
        '主要任务': ['A类产品优化', 'B类产品优化', 'C类产品优化'],
        '预期收益': ['¥900K', '¥400K', '¥200K'],
        '风险等级': ['低', '中', '低'],
        '负责部门': ['采购部', '仓储部', '计划部']
    })
    
    st.dataframe(implementation_plan, use_container_width=True, height=200)
    
    # 投资回报分析
    col1, col2 = st.columns(2)
    
    with col1:
        st.subheader("投资回报分析")
        
        roi_data = {
            '优化投入': 150000,
            '年度节省': 1500000,
            '投资回报率': 10.0,
            '回收期': 1.2
        }
        
        for key, value in roi_data.items():
            if key in ['优化投入', '年度节省']:
                st.metric(key, f"¥{value:,.0f}")
            elif key == '投资回报率':
                st.metric(key, f"{value:.1f}倍")
            else:
                st.metric(key, f"{value:.1f}个月")
    
    with col2:
        st.subheader("风险评估")
        
        risks = [
            "需求预测不准确可能导致缺货",
            "供应商交期延误影响补货",
            "市场变化影响产品需求",
            "系统切换期间的操作风险"
        ]
        
        for i, risk in enumerate(risks, 1):
            st.warning(f"{i}. {risk}")

# 异常库存监控
elif function == "⚠️ 异常库存监控":
    st.header("异常库存监控")
    
    # 异常统计概览
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("异常产品数", "15", "3")
    with col2:
        st.metric("缺货产品", "5", "1")
    with col3:
        st.metric("过量库存", "8", "2")
    with col4:
        st.metric("呆滞库存", "2", "0")
    
    # 异常类型分析
    st.subheader("异常类型分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 异常类型分布
        anomaly_types = pd.DataFrame({
            '异常类型': ['缺货', '库存不足', '库存过量', '呆滞库存', '损耗异常'],
            '产品数量': [5, 6, 8, 2, 3],
            '影响金额': [450000, 280000, 680000, 120000, 85000]
        })
        
        fig_types = px.bar(anomaly_types, x='异常类型', y='产品数量',
                         color='影响金额',
                         title="异常类型分布")
        st.plotly_chart(fig_types, use_container_width=True)
    
    with col2:
        # 异常趋势分析
        dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='W')
        anomaly_trend = pd.DataFrame({
            '周次': dates,
            '异常数量': [np.random.poisson(3) + 2 for _ in range(len(dates))],
            '解决数量': [np.random.poisson(2) + 1 for _ in range(len(dates))]
        })
        
        fig_trend = px.line(anomaly_trend, x='周次', y=['异常数量', '解决数量'],
                          title="异常库存趋势")
        st.plotly_chart(fig_trend, use_container_width=True)
    
    # 异常库存详情
    st.subheader("异常库存详情")
    
    # 筛选条件
    col1, col2, col3 = st.columns(3)
    with col1:
        anomaly_filter = st.selectbox("异常类型", ['全部', '缺货', '库存不足', '库存过量', '呆滞库存', '损耗异常'])
    with col2:
        severity_filter = st.selectbox("严重程度", ['全部', '高', '中', '低'])
    with col3:
        status_filter = st.selectbox("处理状态", ['全部', '待处理', '处理中', '已解决'])
    
    # 异常库存数据
    anomaly_inventory = pd.DataFrame({
        '产品编码': [f'P{i:04d}' for i in range(1, 16)],
        '产品名称': [f'产品{chr(65+i%10)}' for i in range(15)],
        '异常类型': ['缺货', '库存不足', '库存过量', '呆滞库存', '损耗异常'] * 3,
        '当前库存': [0, 45, 2500, 180, 85, 0, 60, 1800, 220, 95, 
                   0, 35, 3200, 160, 75],
        '标准库存': [100, 150, 1000, 200, 120, 80, 200, 800, 250, 150,
                   120, 180, 1200, 180, 100],
        '偏差量': [-100, -105, 1500, -20, -35, -80, -140, 1000, -30, -55,
                 -120, -145, 2000, -20, -25],
        '偏差率': [-100, -70, 150, -10, -29, -100, -70, 125, -12, -37,
                 -100, -81, 167, -11, -25],
        '严重程度': ['高', '中', '中', '低', '低', '高', '中', '中', '低', '低',
                  '高', '中', '高', '低', '低'],
        '发现时间': [datetime.now() - timedelta(days=i) for i in range(15)],
        '处理状态': ['待处理', '处理中', '已解决', '待处理', '处理中'] * 3,
        '负责人': ['张三', '李四', '王五', '赵六'] * 3 + ['张三', '李四', '王五']
    })
    
    # 格式化显示
    display_anomaly = anomaly_inventory.copy()
    display_anomaly['发现时间'] = display_anomaly['发现时间'].dt.strftime('%Y-%m-%d')
    display_anomaly['偏差率'] = display_anomaly['偏差率'].apply(lambda x: f'{x:+.1f}%')
    
    def highlight_severity(row):
        if row['严重程度'] == '高':
            return ['background-color: #ffebee'] * len(row)
        elif row['严重程度'] == '中':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = display_anomaly.style.apply(highlight_severity, axis=1)
    st.dataframe(styled_df, use_container_width=True)
    
    # 异常处理流程
    st.subheader("异常处理流程")
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.markdown("""
        **异常处理标准流程：**
        
        1. **异常检测** - 系统自动监控库存水平
        2. **异常确认** - 人工核实异常情况
        3. **原因分析** - 分析异常产生原因
        4. **制定方案** - 制定具体处理方案
        5. **执行处理** - 按方案执行处理措施
        6. **效果验证** - 验证处理效果
        7. **经验总结** - 总结经验防止再发
        """)
    
    with col2:
        # 处理时效统计
        processing_stats = pd.DataFrame({
            '异常类型': ['缺货', '库存不足', '库存过量', '呆滞库存', '损耗异常'],
            '平均处理时间': [2, 5, 15, 30, 7],
            '处理成功率': [95, 88, 92, 75, 85]
        })
        
        fig_processing = px.scatter(processing_stats, 
                                  x='平均处理时间', y='处理成功率',
                                  size='处理成功率', color='异常类型',
                                  title="异常处理效率分析")
        st.plotly_chart(fig_processing, use_container_width=True)
    
    # 预警设置
    st.subheader("异常预警设置")
    
    with st.expander("配置异常预警规则"):
        col1, col2 = st.columns(2)
        
        with col1:
            st.markdown("**库存水平预警**")
            low_stock_threshold = st.slider("低库存预警阈值(%)", 10, 50, 20)
            high_stock_threshold = st.slider("高库存预警阈值(%)", 150, 300, 200)
            zero_stock_alert = st.checkbox("零库存立即预警", value=True)
        
        with col2:
            st.markdown("**时间相关预警**")
            stagnant_days = st.slider("呆滞库存天数", 30, 180, 90)
            forecast_days = st.slider("预测预警天数", 7, 30, 14)
            notification_method = st.multiselect("通知方式", 
                                               ['邮件', '短信', '系统消息', '钉钉'],
                                               default=['邮件', '系统消息'])
        
        if st.button("保存预警设置"):
            st.success("异常预警设置已保存！")

# ABC-XYZ分析
elif function == "🎯 ABC-XYZ分析":
    st.header("ABC-XYZ分析")
    
    # 分析说明
    st.subheader("分析方法说明")
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.markdown("""
        **ABC分析（价值分析）：**
        - **A类**：高价值产品（累计价值占80%）
        - **B类**：中价值产品（累计价值占15%）
        - **C类**：低价值产品（累计价值占5%）
        """)
    
    with col2:
        st.markdown("""
        **XYZ分析（需求变异性分析）：**
        - **X类**：需求稳定（变异系数<0.5）
        - **Y类**：需求波动（变异系数0.5-1.0）
        - **Z类**：需求不规律（变异系数>1.0）
        """)
    
    # ABC-XYZ矩阵
    st.subheader("ABC-XYZ分析矩阵")
    
    # 生成分析数据
    abc_xyz_data = pd.DataFrame({
        '产品编码': [f'P{i:04d}' for i in range(1, 51)],
        '产品名称': [f'产品{chr(65+(i-1)%26)}{(i-1)//26+1}' for i in range(1, 51)],
        '年销售额': np.random.lognormal(12, 1, 50),
        '需求变异系数': np.random.uniform(0.1, 1.5, 50),
        '库存金额': np.random.uniform(50000, 500000, 50)
    })
    
    # ABC分类
    abc_xyz_data = abc_xyz_data.sort_values('年销售额', ascending=False)
    abc_xyz_data['累计销售额'] = abc_xyz_data['年销售额'].cumsum()
    abc_xyz_data['累计占比'] = abc_xyz_data['累计销售额'] / abc_xyz_data['年销售额'].sum()
    
    abc_xyz_data['ABC分类'] = abc_xyz_data['累计占比'].apply(
        lambda x: 'A' if x <= 0.8 else ('B' if x <= 0.95 else 'C')
    )
    
    # XYZ分类
    abc_xyz_data['XYZ分类'] = abc_xyz_data['需求变异系数'].apply(
        lambda x: 'X' if x < 0.5 else ('Y' if x < 1.0 else 'Z')
    )
    
    # 组合分类
    abc_xyz_data['组合分类'] = abc_xyz_data['ABC分类'] + abc_xyz_data['XYZ分类']
    
    # 矩阵可视化
    col1, col2 = st.columns(2)
    
    with col1:
        # ABC-XYZ散点图
        fig_matrix = px.scatter(abc_xyz_data, 
                              x='需求变异系数', y='年销售额',
                              color='组合分类', size='库存金额',
                              hover_name='产品名称',
                              title="ABC-XYZ分析矩阵")
        
        # 添加分界线
        fig_matrix.add_vline(x=0.5, line_dash="dash", line_color="gray")
        fig_matrix.add_vline(x=1.0, line_dash="dash", line_color="gray")
        
        st.plotly_chart(fig_matrix, use_container_width=True)
    
    with col2:
        # 组合分类统计
        category_stats = abc_xyz_data['组合分类'].value_counts().reset_index()
        category_stats.columns = ['组合分类', '产品数量']
        
        fig_category = px.bar(category_stats, x='组合分类', y='产品数量',
                            title="ABC-XYZ组合分类分布")
        st.plotly_chart(fig_category, use_container_width=True)
    
    # 分类汇总表
    st.subheader("分类汇总分析")
    
    summary_stats = abc_xyz_data.groupby('组合分类').agg({
        '产品编码': 'count',
        '年销售额': ['sum', 'mean'],
        '库存金额': ['sum', 'mean'],
        '需求变异系数': 'mean'
    }).round(2)
    
    summary_stats.columns = ['产品数量', '总销售额', '平均销售额', '总库存额', '平均库存额', '平均变异系数']
    summary_stats = summary_stats.reset_index()
    
    # 格式化显示
    display_summary = summary_stats.copy()
    for col in ['总销售额', '平均销售额', '总库存额', '平均库存额']:
        display_summary[col] = display_summary[col].apply(lambda x: f'¥{x:,.0f}')
    
    st.dataframe(display_summary, use_container_width=True)
    
    # 管理策略建议
    st.subheader("管理策略建议")
    
    strategy_recommendations = {
        'AX': '🔥 重点管理：高价值+稳定需求，采用JIT策略，严格控制库存',
        'AY': '⚡ 重要管理：高价值+波动需求，适度安全库存，密切监控',
        'AZ': '🎯 特殊管理：高价值+不规律需求，灵活库存策略，快速响应',
        'BX': '📊 标准管理：中价值+稳定需求，定期订货策略',
        'BY': '🔄 常规管理：中价值+波动需求，混合库存策略',
        'BZ': '⚠️ 谨慎管理：中价值+不规律需求，小批量多频次',
        'CX': '📦 简化管理：低价值+稳定需求，批量采购',
        'CY': '🔧 基础管理：低价值+波动需求，简单库存控制',
        'CZ': '💡 最小管理：低价值+不规律需求，按需采购'
    }
    
    for category, strategy in strategy_recommendations.items():
        if category in abc_xyz_data['组合分类'].values:
            st.info(f"**{category}类产品**: {strategy}")
    
    # 详细产品列表
    st.subheader("产品详细分类")
    
    # 分类筛选
    selected_category = st.selectbox("选择分类查看详情", 
                                   ['全部'] + sorted(abc_xyz_data['组合分类'].unique().tolist()))
    
    if selected_category != '全部':
        filtered_data = abc_xyz_data[abc_xyz_data['组合分类'] == selected_category]
    else:
        filtered_data = abc_xyz_data
    
    # 格式化显示
    display_data = filtered_data[['产品编码', '产品名称', 'ABC分类', 'XYZ分类', 
                                '组合分类', '年销售额', '库存金额', '需求变异系数']].copy()
    display_data['年销售额'] = display_data['年销售额'].apply(lambda x: f'¥{x:,.0f}')
    display_data['库存金额'] = display_data['库存金额'].apply(lambda x: f'¥{x:,.0f}')
    display_data['需求变异系数'] = display_data['需求变异系数'].apply(lambda x: f'{x:.2f}')
    
    st.dataframe(display_data, use_container_width=True)

# 库存绩效评估
elif function == "📋 库存绩效评估":
    st.header("库存绩效评估")
    
    # 绩效指标概览
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("综合绩效得分", "85.6分", "2.3")
    with col2:
        st.metric("库存周转率", "8.5次/年", "0.8")
    with col3:
        st.metric("服务水平", "96.2%", "1.5%")
    with col4:
        st.metric("库存准确率", "98.7%", "0.9%")
    
    # 绩效评估维度
    st.subheader("绩效评估维度")
    
    performance_data = pd.DataFrame({
        '评估维度': ['效率指标', '质量指标', '成本指标', '服务指标', '风险指标'],
        '权重': [25, 20, 20, 20, 15],
        '当前得分': [88, 92, 82, 89, 78],
        '目标得分': [90, 95, 85, 92, 85],
        '达成率': [97.8, 96.8, 96.5, 96.7, 91.8]
    })
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 绩效雷达图
        fig_performance = go.Figure()
        
        fig_performance.add_trace(go.Scatterpolar(
            r=performance_data['当前得分'],
            theta=performance_data['评估维度'],
            fill='toself',
            name='当前表现',
            line_color='blue'
        ))
        
        fig_performance.add_trace(go.Scatterpolar(
            r=performance_data['目标得分'],
            theta=performance_data['评估维度'],
            fill='toself',
            name='目标水平',
            line_color='red',
            line_dash='dash'
        ))
        
        fig_performance.update_layout(
            polar=dict(
                radialaxis=dict(
                    visible=True,
                    range=[0, 100]
                )
            ),
            showlegend=True,
            title="库存绩效雷达图"
        )
        
        st.plotly_chart(fig_performance, use_container_width=True)
    
    with col2:
        # 绩效得分分布
        fig_score = px.bar(performance_data, x='评估维度', y='当前得分',
                         color='达成率',
                         title="各维度绩效得分")
        fig_score.update_layout(xaxis_tickangle=45)
        st.plotly_chart(fig_score, use_container_width=True)
    
    # 详细绩效指标
    st.subheader("详细绩效指标")
    
    detailed_metrics = pd.DataFrame({
        '指标类别': ['效率指标', '效率指标', '效率指标', '质量指标', '质量指标',
                  '成本指标', '成本指标', '服务指标', '服务指标', '风险指标'],
        '具体指标': ['库存周转率', '库存周转天数', '资金周转率', '库存准确率', '盘点差异率',
                  '库存持有成本率', '缺货成本率', '订单满足率', '及时交付率', '呆滞库存率'],
        '当前值': [8.5, 43, 6.2, 98.7, 1.3, 15.2, 2.1, 96.2, 94.8, 3.5],
        '目标值': [10.0, 36, 7.0, 99.0, 1.0, 14.0, 1.5, 97.0, 96.0, 3.0],
        '单位': ['次/年', '天', '次/年', '%', '%', '%', '%', '%', '%', '%'],
        '达成情况': ['良好', '需改进', '良好', '优秀', '良好', '良好', '需改进', '优秀', '良好', '需改进']
    })
    
    # 根据达成情况设置行颜色
    def highlight_performance(row):
        if row['达成情况'] == '优秀':
            return ['background-color: #e8f5e8'] * len(row)
        elif row['达成情况'] == '需改进':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return [''] * len(row)
    
    styled_df = detailed_metrics.style.apply(highlight_performance, axis=1)
    st.dataframe(styled_df, use_container_width=True)
    
    # 绩效趋势分析
    st.subheader("绩效趋势分析")
    
    # 生成趋势数据
    months = pd.date_range(start='2024-01-01', end='2024-12-31', freq='M')
    trend_data = pd.DataFrame({
        '月份': months,
        '综合得分': [80 + i*0.5 + np.random.normal(0, 2) for i in range(len(months))],
        '周转率': [7.5 + i*0.1 + np.random.normal(0, 0.3) for i in range(len(months))],
        '服务水平': [94 + i*0.2 + np.random.normal(0, 1) for i in range(len(months))],
        '准确率': [97 + i*0.15 + np.random.normal(0, 0.5) for i in range(len(months))]
    })
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 综合得分趋势
        fig_trend1 = px.line(trend_data, x='月份', y='综合得分',
                           title="综合绩效得分趋势")
        st.plotly_chart(fig_trend1, use_container_width=True)
    
    with col2:
        # 关键指标趋势
        fig_trend2 = px.line(trend_data, x='月份', 
                           y=['周转率', '服务水平', '准确率'],
                           title="关键指标趋势")
        st.plotly_chart(fig_trend2, use_container_width=True)
    
    # 改进建议
    st.subheader("绩效改进建议")
    
    improvement_suggestions = pd.DataFrame({
        '改进领域': ['库存周转', '成本控制', '风险管理', '服务质量', '系统优化'],
        '当前状况': ['周转率偏低', '持有成本较高', '呆滞库存偏多', '交付及时性待提升', '预测精度需改善'],
        '改进措施': ['优化补货策略', '减少安全库存', '加强呆滞品处理', '改善供应链协同', '升级预测模型'],
        '预期效果': ['提升至10次/年', '降低至14%', '控制在3%以内', '提升至96%', '提高预测精度5%'],
        '实施周期': ['3个月', '6个月', '4个月', '3个月', '6个月'],
        '负责部门': ['计划部', '财务部', '仓储部', '物流部', 'IT部']
    })
    
    st.dataframe(improvement_suggestions, use_container_width=True)
    
    # 绩效对标分析
    st.subheader("行业对标分析")
    
    benchmark_data = pd.DataFrame({
        '绩效指标': ['库存周转率', '服务水平', '库存准确率', '持有成本率'],
        '公司表现': [8.5, 96.2, 98.7, 15.2],
        '行业平均': [7.2, 94.5, 97.8, 16.5],
        '行业领先': [12.0, 98.5, 99.5, 12.0],
        '相对位置': ['高于平均', '高于平均', '高于平均', '优于平均']
    })
    
    col1, col2 = st.columns(2)
    
    with col1:
        st.dataframe(benchmark_data, use_container_width=True)
    
    with col2:
        # 对标雷达图
        fig_benchmark = go.Figure()
        
        # 标准化数据用于对比
        normalized_company = [8.5/12*100, 96.2, 98.7, (20-15.2)/8*100]
        normalized_average = [7.2/12*100, 94.5, 97.8, (20-16.5)/8*100]
        normalized_leading = [100, 98.5, 99.5, 100]
        
        fig_benchmark.add_trace(go.Scatterpolar(
            r=normalized_company,
            theta=benchmark_data['绩效指标'],
            fill='toself',
            name='公司表现',
            line_color='blue'
        ))
        
        fig_benchmark.add_trace(go.Scatterpolar(
            r=normalized_average,
            theta=benchmark_data['绩效指标'],
            fill='toself',
            name='行业平均',
            line_color='orange'
        ))
        
        fig_benchmark.add_trace(go.Scatterpolar(
            r=normalized_leading,
            theta=benchmark_data['绩效指标'],
            fill='toself',
            name='行业领先',
            line_color='green',
            line_dash='dash'
        ))
        
        fig_benchmark.update_layout(
            polar=dict(
                radialaxis=dict(
                    visible=True,
                    range=[0, 100]
                )
            ),
            showlegend=True,
            title="行业对标雷达图"
        )
        
        st.plotly_chart(fig_benchmark, use_container_width=True)

# 智能预测分析
elif function == "🔮 智能预测分析":
    st.header("智能预测分析")
    
    # 预测模型概览
    col1, col2, col3, col4 = st.columns(4)
    
    with col1:
        st.metric("预测准确率", "87.3%", "2.1%")
    with col2:
        st.metric("预测覆盖率", "95.8%", "1.5%")
    with col3:
        st.metric("模型数量", "5个", "1")
    with col4:
        st.metric("更新频率", "每日", "")
    
    # 预测模型选择
    st.subheader("预测模型配置")
    
    col1, col2 = st.columns(2)
    
    with col1:
        model_type = st.selectbox("选择预测模型", 
                                ["ARIMA时间序列", "机器学习模型", "深度学习模型", "集成模型"])
        
        forecast_horizon = st.slider("预测时间范围(天)", 7, 90, 30)
        confidence_level = st.slider("置信水平(%)", 80, 99, 95)
    
    with col2:
        st.subheader("模型性能对比")
        
        model_performance = pd.DataFrame({
            '模型类型': ['ARIMA', '随机森林', 'LSTM', '集成模型'],
            '准确率': [82.5, 85.2, 88.7, 91.3],
            '训练时间': [5, 15, 45, 60],
            '预测速度': [0.1, 0.5, 2.0, 3.0]
        })
        
        fig_model = px.scatter(model_performance, x='训练时间', y='准确率',
                             size='预测速度', color='模型类型',
                             title="模型性能对比")
        st.plotly_chart(fig_model, use_container_width=True)
    
    # 需求预测结果
    st.subheader("需求预测结果")
    
    # 生成预测数据
    future_dates = pd.date_range(start=datetime.now(), periods=forecast_horizon, freq='D')
    historical_dates = pd.date_range(start=datetime.now() - timedelta(days=90), 
                                   end=datetime.now(), freq='D')
    
    # 历史数据
    historical_demand = [1000 + 200*np.sin(i*2*np.pi/30) + np.random.normal(0, 50) 
                        for i in range(len(historical_dates))]
    
    # 预测数据
    forecast_demand = [1000 + 200*np.sin((90+i)*2*np.pi/30) + np.random.normal(0, 30) 
                      for i in range(len(future_dates))]
    
    # 置信区间
    upper_bound = [d + 100 for d in forecast_demand]
    lower_bound = [d - 100 for d in forecast_demand]
    
    # 合并数据
    forecast_data = pd.DataFrame({
        '日期': list(historical_dates) + list(future_dates),
        '需求量': historical_demand + forecast_demand,
        '类型': ['历史'] * len(historical_dates) + ['预测'] * len(future_dates)
    })
    
    # 预测图表
    fig_forecast = px.line(forecast_data, x='日期', y='需求量', color='类型',
                         title=f"需求预测 - 未来{forecast_horizon}天")
    
    # 添加置信区间
    fig_forecast.add_trace(go.Scatter(
        x=future_dates,
        y=upper_bound,
        fill=None,
        mode='lines',
        line_color='rgba(0,0,0,0)',
        showlegend=False
    ))
    
    fig_forecast.add_trace(go.Scatter(
        x=future_dates,
        y=lower_bound,
        fill='tonexty',
        mode='lines',
        line_color='rgba(0,0,0,0)',
        name='置信区间',
        fillcolor='rgba(0,100,80,0.2)'
    ))
    
    st.plotly_chart(fig_forecast, use_container_width=True)
    
    # 预测准确性分析
    st.subheader("预测准确性分析")
    
    col1, col2 = st.columns(2)
    
    with col1:
        # 预测误差分析
        error_data = pd.DataFrame({
            '产品类别': ['A类产品', 'B类产品', 'C类产品'],
            'MAPE': [8.5, 12.3, 15.7],
            'MAE': [45, 68, 89],
            'RMSE': [62, 85, 112]
        })
        
        fig_error = px.bar(error_data, x='产品类别', y='MAPE',
                         title="预测误差分析(MAPE)")
        st.plotly_chart(fig_error, use_container_width=True)
    
    with col2:
        # 预测偏差趋势
        bias_dates = pd.date_range(start='2024-01-01', end='2024-12-31', freq='W')
        bias_data = pd.DataFrame({
            '周次': bias_dates,
            '预测偏差': [np.random.normal(0, 5) for _ in range(len(bias_dates))]
        })
        
        fig_bias = px.line(bias_data, x='周次', y='预测偏差',
                         title="预测偏差趋势")
        fig_bias.add_hline(y=0, line_dash="dash", line_color="red")
        st.plotly_chart(fig_bias, use_container_width=True)
    
    # 库存建议
    st.subheader("基于预测的库存建议")
    
    inventory_recommendations = pd.DataFrame({
        '产品编码': [f'P{i:04d}' for i in range(1, 11)],
        '产品名称': [f'产品{chr(65+i)}' for i in range(10)],
        '当前库存': [850, 1200, 650, 980, 1500, 720, 450, 1100, 890, 1350],
        '预测需求': [900, 1100, 750, 1050, 1400, 800, 500, 1200, 950, 1300],
        '建议库存': [1080, 1320, 900, 1260, 1680, 960, 600, 1440, 1140, 1560],
        '调整量': [230, 120, 250, 280, 180, 240, 150, 340, 250, 210],
        '调整类型': ['增加', '增加', '增加', '增加', '增加', '增加', '增加', '增加', '增加', '增加'],
        '紧急程度': ['中', '低', '高', '中', '低', '中', '高', '低', '中', '低']
    })
    
    def highlight_urgency_forecast(row):
        if row['紧急程度'] == '高':
            return ['background-color: #ffebee'] * len(row)
        elif row['紧急程度'] == '中':
            return ['background-color: #fff3e0'] * len(row)
        else:
            return ['background-color: #e8f5e8'] * len(row)
    
    styled_df = inventory_recommendations.style.apply(highlight_urgency_forecast, axis=1)
    st.dataframe(styled_df, use_container_width=True)
    
    # 模型优化建议
    st.subheader("模型优化建议")
    
    optimization_suggestions = [
        "📊 增加外部数据源（天气、节假日、促销活动）提高预测精度",
        "🔄 定期重新训练模型以适应市场变化",
        "📈 针对不同产品类别使用专门的预测模型",
        "⚡ 实施实时预测更新机制",
        "🎯 结合专家经验进行预测结果调整"
    ]
    
    for suggestion in optimization_suggestions:
        st.info(suggestion)

# 页面底部信息
st.markdown("---")
st.markdown(
    """
    <div style="text-align: center; color: #666; font-size: 0.9rem;">
        高级库存管理系统 | 数据更新时间: {}
    </div>
    """.format(datetime.now().strftime("%Y-%m-%d %H:%M:%S")),
    unsafe_allow_html=True
)